home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / src / CdBS_KQSrc0_4.lha / KaliosisQuantrum / MORB / GuiSupport.s < prev    next >
Text File  |  1998-01-01  |  10KB  |  595 lines

  1. *
  2. * CdBSian Obviously Universal & Interactive Nonsense (COUIN)
  3. * (Absurdité CdBSienne Manifestement Universelle et Interactive)
  4. * ©1997-1998, CdBS Software (MORB)
  5. * Misc support routines for gui based things
  6. * $Id: GuiSupport.s 0.6 1997/11/05 19:54:12 MORB Exp MORB $
  7. *
  8.  
  9. ;fs "_OutOfMemory"
  10. _OutOfMemory:
  11.      lea       OOMTitle(pc),a0
  12.      lea       OOMBody(pc),a1
  13.      lea       OOMBut(pc),a2
  14.      sub.l     a3,a3
  15.      sub.l     a4,a4
  16.      bra       _Request
  17.  
  18. OOMTitle:
  19.      dc.b      "Don't panic -- This is a critical situation",0
  20. OOMBody:
  21.      dc.b      "Ran out of memory",$a,$a
  22.      dc.b      "Try to iconify COUIN and to close things",$a
  23.      dc.b      "in order to save some memory, or to buy fast ram,",$a
  24.      dc.b      "or to pray, or to kill yourself, or to blow the monitor",$a
  25.      dc.b      "by hitting it with your head, or to cry, or to eat your",$a
  26.      dc.b      "mouse, or to break an egg, or to fly, or to throw",$a
  27.      dc.b      "yourself into a wall, or to put green dwarves into your",$a
  28.      dc.b      "garden, or to build a cathedral, or to slaughter a dog, or",$a
  29.      dc.b      "to do all of this at the same time. Grûûûûuûuuuuuûûûûûûûûnt.",0
  30. OOMBut:
  31.      dc.b      "OK, I will try.",0
  32.      even
  33. ;fe
  34.  
  35. ;fs "_FileRequest"
  36. FRBufferSize       = 512
  37.  
  38. FRHook:
  39.      ds.l      1
  40. FRCurrent:
  41.      ds.l      1
  42. FRLastGui:
  43.      ds.l      1
  44. FRList:
  45.      ds.l      3
  46. FRLock:
  47.      ds.l      1
  48. FRMemPool:
  49.      ds.l      1
  50. FRExallFlag:
  51.      ds.l      1
  52. FRReadDir:
  53.      ds.l      1
  54.      even
  55.  
  56. _FileRequest:      ; a2=FileReq a1=Hook
  57.      move.l    _CurrentGui,FRLastGui
  58.      move.l    a1,FRHook
  59.      move.l    a2,FRCurrent
  60.      move.l    (a2),FRTitle+ge_Data
  61.  
  62.      lea       FRList(pc),a0
  63.      NEWLIST   a0
  64.  
  65.      clr.l     FRExallFlag
  66.  
  67.      lea       CustomBase,a6
  68.  
  69.      lea       FRGui(pc),a0
  70.      bsr       _ChangeGui
  71.  
  72.      lea       FRHandler(pc),a0
  73.      move.l    a0,_PreHandler
  74.  
  75.      move.l    (AbsExecBase).w,a6
  76.      move.l    _SStack,d0
  77.      CALL      UserState
  78.  
  79.      bsr.s     FRBreak
  80.  
  81.      lea       fr_Path(a2),a0
  82.      lea       _StrBuf,a1
  83. .StrCpy:
  84.      move.b    (a0)+,(a1)+
  85.      bne.s     .StrCpy
  86.  
  87.      bsr.s     FRSelectDir
  88.  
  89.      move.l    (AbsExecBase).w,a6
  90.      CALL      SuperState
  91.      move.l    d0,_SStack
  92.      lea       CustomBase,a6
  93.  
  94.      tst.l     d7
  95.      bne.s     .Done
  96.  
  97.      lea       FRLv(pc),a0
  98.      bsr       _Layout
  99.      bsr       _Render
  100.  
  101. .Done:
  102.      rts
  103. ;fe
  104.  
  105. ;fs "FROk"
  106. FROk:
  107.      move.l    FRCurrent(pc),a2
  108.      lea       fr_Path(a2),a3
  109.      move.l    a3,a1
  110.      lea       _StrBuf,a0
  111.  
  112. .StrCpy:
  113.      move.b    (a0)+,(a1)+
  114.      bne.s     .StrCpy
  115.  
  116.      move.l    (AbsExecBase).w,a6
  117.      move.l    _SStack,d0
  118.      CALL      UserState
  119.  
  120.      move.l    Dos_Base,a6
  121.      move.l    a3,d1
  122.      move.l    #_NameBuffer,d2
  123.      move.l    #1024,d3
  124.      CALL      AddPart
  125.  
  126.      move.l    (AbsExecBase).w,a6
  127.      moveq     #-1,d7
  128.      bra.s     FRExit
  129. ;fe
  130. ;fs "FRCancel"
  131. FRCancel:
  132.      move.l    (AbsExecBase).w,a6
  133.      move.l    _SStack,d0
  134.      CALL      UserState
  135.      moveq     #0,d7
  136. ;fe
  137. ;fs "FRExit"
  138. FRExit:
  139.      clr.l     _PreHandler
  140.      clr.l     FRReadDir
  141.  
  142.      move.l    FRMemPool,a0
  143.      CALL      DeletePool
  144.      clr.l     FRMemPool
  145.  
  146.      bsr.s     FRBreak
  147.  
  148.      move.l    (AbsExecBase).w,a6
  149.      CALL      SuperState
  150.      move.l    d0,_SStack
  151.      lea       CustomBase,a6
  152.  
  153.      move.l    FRLastGui(pc),a0
  154.      bsr       _ChangeGui
  155.  
  156.      move.l    FRHook(pc),d0
  157.      beq.s     .Done
  158.  
  159.      move.l    d0,a1
  160.      move.l    d7,d0
  161.      move.l    FRCurrent(pc),a0
  162.      jmp       (a1)
  163.  
  164. .Done:
  165.      rts
  166. ;fe
  167.  
  168. ;fs "FRBreak"
  169. FRBreak:
  170.      move.l    Dos_Base,a6
  171.      tst.l     FRExallFlag
  172.      beq.s     .Gzlonkrunk
  173.  
  174.      move.l    FRLock(pc),d1
  175.      move.l    #_FRBuffer,d2
  176.      move.l    #FRBufferSize,d3
  177.      moveq     #ED_COMMENT,d4
  178.      move.l    FRExallCtrl,d5
  179.      CALL      ExAllEnd
  180.  
  181. .Gzlonkrunk:
  182.      move.l    FRExallCtrl(pc),a0
  183.      clr.l     eac_LastKey(a0)
  184.  
  185.      move.l    FRLock(pc),d1
  186.      CALL      UnLock
  187.      clr.l     FRLock
  188.      rts
  189. ;fe
  190. ;fs "FRHandler"
  191. FRHandler:
  192.      tst.l     FRExallFlag
  193.      bne.s     .Continue
  194.      tst.l     FRReadDir
  195.      bne.s     .Continue
  196. .Done:
  197.      rts
  198.  
  199. .Continue:
  200.      move.l    FRLock(pc),d7
  201.      beq.s     .Done
  202.  
  203.      move.l    (AbsExecBase).w,a6
  204.      move.l    _SStack,d0
  205.      CALL      UserState
  206.  
  207.      move.l    Dos_Base,a6
  208.      move.l    d7,d1
  209.      move.l    #_FRBuffer,d2
  210.      move.l    #FRBufferSize,d3
  211.      moveq     #ED_COMMENT,d4
  212.      move.l    FRExallCtrl,d5
  213.      CALL      ExAll
  214.      move.l    d0,FRExallFlag
  215.  
  216.      move.l    (AbsExecBase).w,a6
  217.  
  218.      move.l    FRExallCtrl(pc),a3
  219.      move.l    eac_Entries(a3),d7
  220.      beq.s     .NoEntries
  221.      subq.l    #1,d7
  222.  
  223.      lea       _FRBuffer,a2
  224.  
  225. .Loop:
  226.      move.l    FRMemPool(pc),a0
  227.      move.l    #lve_Size+4+32+80,d0
  228.      CALL      AllocPooled
  229.      tst.l     d0
  230.      beq.s     _OutOfMemory
  231.      move.l    d0,a1
  232.      lea       lve_Size+4(a1),a0
  233.      move.l    a0,lve_String(a1)
  234.  
  235.      move.l    ed_Name(a2),a3
  236. .StrCpy:
  237.      move.b    (a3)+,(a0)+
  238.      bne.s     .StrCpy
  239.  
  240.      move.l    a1,a3
  241.      lea       FRList(pc),a0
  242.      tst.l     ed_Type(a2)
  243.      bmi.s     .File
  244.      CALL      AddHead
  245.      moveq     #2,d0
  246.      bra.s     .Dir
  247. .File:
  248.      CALL      AddTail
  249.      moveq     #1,d0
  250. .Dir:
  251.      move.l    d0,lve_Color(a3)
  252.  
  253.      move.l    (a2),a2
  254.      dbf       d7,.Loop
  255.  
  256.      CALL      SuperState
  257.      move.l    d0,_SStack
  258.      lea       CustomBase,a6
  259.      lea       FRLv(pc),a0
  260.      bsr       _Layout
  261.      bsr       _Render
  262.      ;move.l    _SStack,d0
  263.      ;CALL      UserState
  264.      rts
  265.  
  266. .NoEntries:
  267.      CALL      SuperState
  268.      move.l    d0,_SStack
  269.      lea       CustomBase,a6
  270.  
  271.      rts
  272. ;fe
  273.  
  274. ;fs "FRParent"
  275. FRParent:
  276.      sf        FRReadDir
  277.  
  278.      lea       FRList(pc),a0
  279.      NEWLIST   a0
  280.  
  281.      lea       FRLv(pc),a0
  282.      clr.l     ge_Data3(a0)
  283.      bsr       _RefreshGuiEntry
  284.  
  285.      move.l    (AbsExecBase).w,a6
  286.      move.l    _SStack,d0
  287.      CALL      UserState
  288.  
  289.      move.l    Dos_Base,a6
  290.      move.l    #_StrBuf,d1
  291.      move.w    #"/\0",-(a7)
  292.      move.l    a7,d2
  293.      move.l    #1024,d3
  294.      CALL      AddPart
  295.      addq.l    #2,a7
  296.  
  297.      bsr.s     FRBreak
  298.  
  299.      bsr.s     FRSelectDir
  300.  
  301.      move.l    (AbsExecBase).w,a6
  302.      CALL      SuperState
  303.      move.l    d0,_SStack
  304.      lea       CustomBase,a6
  305.  
  306.      tst.l     d7
  307.      bne.s     .Done
  308.  
  309.      lea       FRLv(pc),a0
  310.      bsr       _Layout
  311.      bsr       _Render
  312.  
  313. .Done:
  314.      rts
  315. ;fe
  316. ;fs "FRDirHook"
  317. FRDirHook:
  318.      move.l    a0,a2
  319.  
  320.      tst.l     FRLock
  321.      beq.s     .VolList
  322.  
  323.      moveq     #2,d0
  324.      cmp.l     lve_Color(a2),d0
  325.      beq.s     .VolList
  326.  
  327.      move.l    lve_String(a2),a1
  328.      lea       _NameBuffer,a3
  329. .FileNameLoop:
  330.      move.b    (a1)+,(a3)+
  331.      bne.s     .FileNameLoop
  332.      rts
  333.  
  334. .VolList:
  335.      sf        FRReadDir
  336.  
  337.      lea       FRList(pc),a0
  338.      NEWLIST   a0
  339.  
  340.      lea       FRLv(pc),a0
  341.      clr.l     ge_Data3(a0)
  342.      bsr       _RefreshGuiEntry
  343.  
  344.      move.l    (AbsExecBase).w,a6
  345.      move.l    _SStack,d0
  346.      CALL      UserState
  347.  
  348.      move.l    Dos_Base,a6
  349.      move.l    #_StrBuf,d1
  350.      move.l    lve_String(a2),d2
  351.      move.l    #1024,d3
  352.      CALL      AddPart
  353.  
  354.      bsr       FRBreak
  355.  
  356.      bsr.s     FRSelectDir
  357.  
  358.      move.l    (AbsExecBase).w,a6
  359.      CALL      SuperState
  360.      move.l    d0,_SStack
  361.      lea       CustomBase,a6
  362.  
  363.      tst.l     d7
  364.      bne.s     .Done
  365.  
  366.      lea       FRLv(pc),a0
  367.      bsr       _Layout
  368.      bsr       _Render
  369.  
  370. .Done:
  371.      rts
  372. ;fe
  373. ;fs "FRSelectDir"
  374. FRSelectDir:
  375.      move.l    (AbsExecBase).w,a6
  376.  
  377.      move.l    FRMemPool(pc),d0
  378.      beq.s     .Scrogneugneu
  379.      move.l    d0,a0
  380.      CALL      DeletePool
  381. .Scrogneugneu:
  382.  
  383.      moveq     #0,d0
  384.      move.l    #4096,d1
  385.      move.l    #512,d2
  386.      CALL      CreatePool
  387.      move.l    d0,FRMemPool
  388.      bne.s     .Rogntudju
  389.  
  390.      CALL      SuperState
  391.      move.l    d0,_SStack
  392.  
  393.      lea       CustomBase,a6
  394.      bra.s     _OutOfMemory
  395.  
  396. .Rogntudju:
  397.  
  398.      move.l    Dos_Base,a6
  399.  
  400.      move.l    #_StrBuf,d1
  401.      moveq     #ACCESS_READ,d2
  402.      CALL      Lock
  403.      move.l    d0,d7
  404.      beq.s     .SplitPath
  405.  
  406.      move.l    d7,d1
  407.      move.l    FRFib,d2
  408.      CALL      Examine
  409.      tst.l     d0
  410.      beq.s     .UnLockAndSplit
  411.  
  412.      move.l    FRFib,a0
  413.      tst.l     fib_EntryType(a0)
  414.      bpl.s     .DirOk
  415.  
  416. .UnLockAndSplit:
  417.      move.l    d7,d1
  418.      CALL      UnLock
  419.  
  420. .SplitPath:
  421.      move.l    #_StrBuf,d1
  422.      CALL      FilePart
  423.      move.l    d0,a0
  424.  
  425.      lea       _NameBuffer,a1
  426. .FileLoop:
  427.      move.b    (a0)+,(a1)+
  428.      bne.s     .FileLoop
  429.  
  430.      move.l    #_StrBuf,d1
  431.      CALL      PathPart
  432.      move.l    d0,a0
  433.      clr.b     (a0)
  434.  
  435.      move.l    #_StrBuf,d1
  436.      moveq     #ACCESS_READ,d2
  437.      CALL      Lock
  438.      move.l    d0,d7
  439.  
  440. .DirOk:
  441.      move.l    d7,FRLock
  442.      beq.s     FRDevList
  443.  
  444.      sne       FRReadDir
  445.      moveq     #-1,d7
  446.      rts
  447. ;fe
  448.  
  449. ;fs "FRVolumes"
  450. FRVolumes:
  451.      sf        FRReadDir
  452.  
  453.      lea       FRList(pc),a0
  454.      NEWLIST   a0
  455.  
  456.      lea       FRLv(pc),a0
  457.      clr.l     ge_Data3(a0)
  458.      bsr       _RefreshGuiEntry
  459.  
  460.      move.l    (AbsExecBase).w,a6
  461.      move.l    _SStack,d0
  462.      CALL      UserState
  463.  
  464.      bsr.s     FRBreak
  465.  
  466.      bsr.s     FRDevList
  467.  
  468.      move.l